// src/api/admin/user.js

import request from '@/utils/request';

/**
 * 一个通用的辅助函数，把JS对象转换成 FormData (URLSearchParams)
 * 你的后端大部分是 Servlet，用这个格式接收数据最方便了！
 * @param {object} obj - 要转换的对象
 */
const toFormData = (obj) => {
    const params = new URLSearchParams();
    for (const key in obj) {
        // 只有值不是 null 或 undefined 的时候才添加到表单数据里
        if (obj[key] !== undefined && obj[key] !== null && obj[key] !== '') {
            params.append(key, obj[key]);
        }
    }
    return params;
};

// ================== 用户管理 API ==================

/**
 * 搜索用户 (对应你的搜索框)
 * GET /api/admin/user/search.do
 */
export const searchUsers = (params) => {
    return request({
        // 后端接口路径，和你的 AdminController 一致
        url: '/api/admin/user/search.do',
        method: 'get',
        // GET请求，axios会把 {id: 1, username: 'test'} 转成 ?id=1&username=test
        params
    });
};

/**
 * 更新用户基本信息 (对应你的“修改”弹窗)
 * POST /api/admin/user/updateInfo.do
 */
export const updateUserInfo = (data) => {
    return request({
        url: '/api/admin/user/updateInfo.do',
        method: 'post',
        data: toFormData(data)
    });
};

/**
 * [新功能] 重置用户密码 (对应你的“重置密码”按钮)
 * 这个函数非常聪明！它复用了 updateUserInfo 接口，完全符合我们之前的约定！
 * POST /api/admin/user/updateInfo.do
 */
export const resetUserPassword = (data) => {
    // 我们只给后端发送 userId 和一个空的 newPassword
    // 你的后端 updateUserinfo 方法看到空的 newPassword，就会知道是重置操作
    const resetData = {
        userId: data.userId,
        newPassword: '' // 传一个空字符串！
    };
    return request({
        url: '/api/admin/user/updateInfo.do',
        method: 'post',
        data: toFormData(resetData)
    });
};

/**
 * 为用户充值 (对应你的“充值”弹窗)
 * POST /api/admin/payment/recharge.do
 */
export const rechargeForUser = (data) => {
    return request({
        url: '/api/admin/payment/recharge.do',
        method: 'post',
        data: toFormData(data) // { targetUserId, amount }
    });
};

export const resetUserPaymentPassword = (data) => {
    return request({
        // 注意，你给的接口是 /payment/manageWallet.do，我加上了/api前缀
        url: '/api/admin/payment/manageWallet.do',
        method: 'post',
        data: toFormData({
            userId: data.userId,
            newPassword: data.newPassword,
            userStatus: 1 // 按照你的要求，这里直接传入数字 1
        })
    });
};